A multicomponent software application comprises parts that are functionally divided into at least one Client and at least one Server. The Client is a visual terminal that is seen by a User of the computer system. The Server is a software module that is arranged in the computer system and directly performs all tasks received from the User via the Client. An example of such software application is the MacKeeper© of the Kromtech Alliance company. The MacKeeper© may be installed on a hard drive as on a means for permanent storage of the computer system data. The MacKeeper© has the Client that is a visual terminal for operating with the software application, and the Server is a software module MacKeeper Agent. In one instance, such multicomponent software application comprises ten different system utilities for cleaning unnecessary files from the drive or checking for a number of malicious software and the like. The User performs cleaning of the unnecessary files from the hard drive by means of sending a message to the Server via the Client of the platform of the MacKeeper©. The Server directly performs scanning and cleaning the unnecessary files from the hard drive. In order to send the message, it is necessary to establish a connection between the Client and the Server. In this case, the simplest architectural solution is a single connection between the Client and the Server. However, such solution has following drawbacks.
When the multicomponent software application comprises ten different system utilities, each of them may have ten modules. Each of such ten modules has its own limited functionality. As a result, the multicomponent software application comprises one hundred components on the side of the Server and one hundred components on the side of the Client. If a single connection is established between the Client and the Server, then upon referral by one Client component to the Server with a request for a function of the Server component, none of the other ninety-nine components of either the Client or the Server components can use the communication channel. It clutters the communication channel, creates a queue and slows down the communication between the Client and the Server.
Another solution for increasing the efficiency of the communication between the Client and the Server is a separate communication between each Client component and each Server component. Such approach enlarges software code written for the Server and the Client, increases time for creating the software code, increases loading of each component due to increase of its functionality, as well as complicates the general architecture of the software application. A solution of the problem may lie in architecture of an interprocess interaction between the Server and the Client that provides an effective communication between the Client and the Server, and, simultaneously, saves time for developing the Client and the Server components.
A method and a system for an interprocess communication in a software-controllable system are described in the U.S. Pat. No. 5,551,035 of Aug. 27, 1996. The described solution allows enhancing a structure of a software application that has interconnected components and providing “Server-Client” processes. The enhancement is achieved by a communication mechanism that allows the software application components to create the communication using symbolic names instead of system addresses associated with physical characteristics of the system. An intercomponent communication protocol uses executable expressions having symbolic names only. The symbolic names are stored in a table that is included in a runtime linking module. The table is configured so that it can convert the symbolic names into system addresses. Therefore, such protocol allows for an independent development of interacting software components, thereby simplifying the development. A single component does not know an address of another component, and the Server and the Client are not arranged on a single processor, and the Server and the Client components do not know whether they are arranged on a single processor. Therewith, the communication of the Server and the Client by means of an executable expression provides an asynchronous communication that allows executing functions by the components without need in receiving a response and leads to avoidance of a suspension or termination of the communication between the Server and the Client. However, the described solution does not achieve the required efficiency of the interprocess communication when the system is scaled to have the Server and the Client each comprising a huge number of components. Also, such solution does not allow simplified sharing of the functionality between the Server and the Client due to a presence of the runtime linking module.
Also, a method and a system for a “Server-Client” interprocess communication, are described in the U.S. Pat. No. 8,032,900 B2 of Oct. 4, 2011, disclosing a communication of processes between the Client and the Server. Such communication provides creation of an interprocess interaction thread that is separated from a main thread of the interaction of the Server and the Client. The separated thread establishes connection with a server. An entry point (port) of the Server for establishing a connection with the Client is created upon establishment of the connection with the Server. One or several asynchronous messages are transmitted to the created entry point of the Server. The interprocess interaction allows to avoid a blockage of performing main client processes and, thus, to avoid reduction of the communication speed between the Server and the Client. According to the described solution, a dedicated thread allows to avoid suspension (termination) of client processes when waiting for responses of the server. However, it has a relatively limited field of usage, and it does not allow to simplify the architecture of the software application itself that is important when writing a software code, compiling the software application and introducing modifications thereto. Creation of the dedicated thread for performing the messages leads to losses of memory resources, which are associated with its maintaining of the separate thread.